package fr.afcepf.atod19.patisserie.test;

import static org.junit.Assert.*;

import java.io.IOException;
import java.util.List;

import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import fr.afcepf.atod19.patisserie.data.DataPatisserieImpl;
import fr.afcepf.atod19.patisserie.data.IDataPatisserie;
import fr.afcepf.atod19.patisserie.entity.Patisserie;

public class testDataPatisserieSansMock {
    private Patisserie patatest;
    private IDataPatisserie dataPatisserie = new DataPatisserieImpl();
    
    private static Patisserie patisserieRecherche;
    @BeforeClass
    public static void changePatisserie() {
        patisserieRecherche = new Patisserie(1, 3.0F, "eclair", "vanille", 600);
    } 
    @Before
    public void setUp() {
        patatest = new Patisserie(null, 12.5f, "nom", "C'est pas mal", 1024); 
        try {
            String path = Thread.currentThread().getContextClassLoader().getResource("base.bat").getPath();
            Process proc = Runtime.getRuntime().exec(path);
            proc.waitFor();
        } catch (IOException | InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }
    @Test
    public void ajouterPatisserieNominal() {
        Integer retour = dataPatisserie.ajouter(patatest);
        assertNotNull(retour);
        assertEquals(3, retour.intValue());
    }

    @Test
    public void ajouterPatisserieDescription() {
        patatest.setDescription(null);
        Integer retour = dataPatisserie.ajouter(patatest);
        assertNull(retour);
    }

    @Test
    public void ajouterPatisserieTropLong() {
        patatest.setNom("scfidsjfisjdiofjdsofoisdjfoisdjfdojsjfdsjfsdifsdoifhsdfsdhfsdihfsdogfusdgfgusdgfgsdgsdfugsi"
                + "dfgsduisdgfiudsgfuigdfusdgfgsdgfgidsgsdgfusdigdsifgdfisgdfiusgdfsd");
        Integer retour = dataPatisserie.ajouter(patatest);
        assertNotNull(retour);
    }

    @Test
    public void supprimerPatisserieExiste() {
        Patisserie patsup = new Patisserie();
        patsup.setId(2);
        Boolean retour = dataPatisserie.manger(patsup);
        assertNotNull(retour);
        assertEquals(retour, true);
    }
    
    @Test
    public void supprimerPatisserieExistePas() {
        Patisserie patsup = new Patisserie();
        patsup.setId(4);
        Boolean retour = dataPatisserie.manger(patsup);
        assertNotNull(retour);
        assertEquals(retour, false);
    }

    @Test
    public void rechercherPatisserieInconnue() {
        List<Patisserie> retour = dataPatisserie.rechercher("Salade burk");
        assertNull(retour);
    }
    
    @Test
    public void rechercherPatisserieExistante() {
        List<Patisserie> retour = dataPatisserie.rechercher("eclair");
        assertNotNull(retour);
        int nbPatisserie = retour.size();
        assertEquals(1, nbPatisserie);
        Patisserie monEclair = retour.get(0);
        assertNotNull(monEclair);
        assertNotNull(monEclair.getId());
        assertNotNull(monEclair.getNom());
        assertNotNull(monEclair.getDescription());
        assertNotNull(monEclair.getPrix());
        assertEquals(patisserieRecherche.getId(), monEclair.getId());
        assertEquals(patisserieRecherche.getNom(), monEclair.getNom());
        assertEquals(patisserieRecherche.getDescription(), monEclair.getDescription());
        assertEquals(patisserieRecherche.getPrix(), monEclair.getPrix());
        assertEquals(patisserieRecherche.getCalorie(), monEclair.getCalorie());
    }
}
